package com.chinawayltd.ews.sample.service.task;

import java.util.Date;
import java.util.List;
import java.util.Map;

import com.chinawayltd.ews.sample.model.TMateriel;
import com.chinawayltd.ews.sample.model.TTask;
import com.chinawayltd.ews.sample.model.algorithm.DriverWorkVO;
import com.chinawayltd.ews.sample.model.task.TaskBranchVO;
import com.chinawayltd.ews.sample.model.task.TaskListVO;
import com.chinawayltd.ews.sample.model.task.TaskOrderDetailVO;
import com.chinawayltd.ews.sample.model.task.TaskScreenVO;
import com.chinawayltd.ews.sample.model.task.TaskStockVO;
import com.chinawayltd.ews.sample.model.task.TaskVO;
import com.chinawayltd.ews.sample.util.ResultModel;
import com.chinawayltd.ews.sample.web.query.AppGirdQuery;
import com.chinawayltd.ews.sample.web.query.DriverGirdQuery;
import com.chinawayltd.ews.sample.web.query.OrderDetailGirdQuery;
import com.chinawayltd.ews.sample.web.query.TaskGirdQuery;

/**
 * @program: greeProject
 * @description 运输任务service
 * @author: chenxin
 * @create: 2018年4月17日 下午7:44:48
 */
public interface TaskService {

	/**
	 * 根据查询条件与分页信息查询运输任务的数据
	 * @param queryParam
	 * @return
	 */
	List<TaskListVO> listTaskAndOrderByPage(TaskGirdQuery queryParam) throws Exception;

	/**
	 * 根据id查出对应的运输任务信息
	 * 
	 * @param id
	 * @return
	 */
	TTask getTaskById(Long id) throws Exception;

	/**
	 * 新增运输任务信息
	 * 
	 * @param tTask
	 * @return
	 */
	void insertTask(TaskOrderDetailVO taskOrderDetailVO) throws Exception;

	/**
	 * 修改运输任务信息和关联的订单信息
	 * 
	 * @param tTask
	 * @return
	 */
	void updateTaskAndOrder(TaskOrderDetailVO taskOrderDetailVO) throws Exception;

	/**
	 * 修改运输任务订单明细信息
	 * 
	 * @param tTask
	 * @return
	 */
	void updateTaskOrder(TaskOrderDetailVO taskOrderDetailVO) throws Exception;
	/**
	 * 修改任务的总板位数
	 * @author: chenxin
	 * @date: 2018年6月30日 下午2:50:52
	 * @param task
	 * @throws Exception
	 */
	void updateTaskRoutPallet(TTask task) throws Exception;
	
	/**
	 * 查询过滤掉的物料
	 * 
	 * @author: chenxin
	 * @date: 2018年4月18日
	 * @param ids
	 * @return
	 */
	List<TMateriel> listMaterielNoIds(String ids) throws Exception;

	/**
	 * 根据查询条件与分页信息查询备货指引管理的数据
	 * 
	 * @author: chenxin
	 * @date: 2018年4月19日
	 * @param queryParam
	 * @return
	 */
	List<TaskStockVO> listTaskAndOrderDetailByPage(TaskGirdQuery queryParam) throws Exception;

	/**
	 * 删除任务与订单关系
	 * 
	 * @author: chenxin
	 * @date: 2018年4月19日
	 * @param id
	 * @return
	 */
	int deleteTaskAndOrderByTaskId(Long id) throws Exception;

	/**
	 * 将未确认的任务都确认
	 * @author: chenxin
	 * @date: 2018年5月3日
	 * @param date
	 * @return
	 */
	int updateNoConfirmStatusByPhone(String phone, Date date) throws Exception;

	/**
	 * 批量删除
	 * 
	 * @author: chenxin
	 * @date: 2018年4月23日
	 * @param idArr
	 * @return
	 */
	int deletesByIds(String[] idArr) throws Exception;

	/**
	 * 根据查询条件与分页信息查询运输任务的数据，用于导出任务使用
	 * 
	 * @param queryParam
	 * @return
	 */
	List<Map<String, Object>> listTaskOrderExportByPage(TaskGirdQuery queryParam) throws Exception;

	/**
	 * 任务装货列表
	 * 
	 * @author: chenxin
	 * @date: 2018年4月27日
	 * @param taskId
	 * @return
	 */
	List<TaskBranchVO> getTaskBranchList(Long taskId) throws Exception;

	/**
	 * 根据任务id查询任务和车辆实时事件
	 * 
	 * @author: chenxin
	 * @date: 2018年4月28日
	 * @param taskId
	 * @return
	 */
	TaskVO getTaskVOByTaskId(Long taskId) throws Exception;

	/**
	 * app查询任务列表
	 * 
	 * @author: chenxin
	 * @date: 2018年5月2日
	 * @param queryParam
	 * @return
	 */
	List<TaskListVO> applistTaskByPage(AppGirdQuery queryParam) throws Exception;
	List<TaskListVO> applistCompleteTaskByPage(AppGirdQuery queryParam) throws Exception;
	/**
	 * 通过任务查询货物明细
	 * 
	 * @author: chenxin
	 * @date: 2018年5月2日
	 * @param taskId
	 * @return
	 */
	List<Map<String, Object>> listOrderDetailByTaskId(Long taskId) throws Exception;
	/**
	 * 分页通过任务查询货物明细
	 * @author: chenxin
	 * @date: 2018年5月2日
	 * @param taskId
	 * @return
	 */
	List<Map<String, Object>> listOrderDetailByPage(OrderDetailGirdQuery queryParam);
	
	/**
	 * 根据任务id确认任务状态
	 * 
	 * @author: chenxin
	 * @date: 2018年5月3日
	 * @param taskId
	 * @param date
	 * @return
	 */
	int updateConfirmStatusByTaskId(Long taskId, Date date) throws Exception;

	/**
	 * 修改任务的执行状态
	 * 
	 * @author: chenxin
	 * @date: 2018年5月3日
	 * @param statusNum
	 * @param taskId
	 * @param date
	 * @return
	 */
	int updateExecutStateByTaskIdAndStatus(Integer statusNum, Long taskId, Date date) throws Exception;

	/**
	 * 修改订单的生成状态
	 * 
	 * @author: chenxin
	 * @date: 2018年5月3日
	 * @param statusNum
	 * @param taskId
	 * @param date
	 * @return
	 */
	int updateOrderGenerateStatusByTaskIdAndStatus(Integer statusNum, Long taskId, Date date) throws Exception;

	/**
	 * 修改订单的执行状态
	 * 
	 * @author: chenxin
	 * @date: 2018年5月3日
	 * @param statusNum
	 * @param taskId
	 * @param date
	 * @return
	 */
	int updateOrderExecuteStatusByTaskIdAndStatus(Integer statusNum, Long taskId, Date date) throws Exception;

	/**
	 * 修改订单的执行状态
	 * 
	 * @author: chenxin
	 * @date: 2018年5月3日
	 * @param taskId
	 * @return
	 */
	int confirmTaskBytaskId(Long taskId) throws Exception;

	/**
	 * 任务开始
	 * 
	 * @author: chenxin
	 * @date: 2018年5月3日
	 * @param taskId
	 * @return
	 */
	ResultModel startTaskBytaskId(Long taskId) throws Exception;

	/**
	 * 根据运输任务id获取运输任务详情
	 * 
	 * @author Fay
	 * @date 2018年5月10日 上午11:07:36
	 * @param taskId
	 * @return
	 */
	TTask getTaskDetailByTaskId(Long taskId) throws Exception;

	/**
	 * 查询所有未执行未生成的订单,并且根据taskId查询已关联的订单做个标识
	 * 
	 * @author Fay
	 * @date 2018年5月10日 上午11:23:41
	 * @param taskId
	 * @return
	 */
	TaskOrderDetailVO selectAllOrderDetailAndSelectedOrder(Long taskId) throws Exception;
	
    /**
     * 查询所有任务
     * @param queryParam
     * @param page
     * @return
     */
    List<TaskListVO> listAllTaskAndOrder() throws Exception;
    /**
     * 监控大屏的任务列表
     * @param queryParam
     * @param page
     * @return
     */
    List<TaskScreenVO> listAllTaskOnScreen(TaskGirdQuery queryParam) throws Exception;

    /**
     * 删除任务
     * @author: chenxin
     * @date: 2018年5月14日 下午4:18:09
     * @param id
     * @return
     * @throws Exception
     */
	void deleteTask(Long id) throws Exception;

    /**
     * 查询所有未确认任务的四级电话
     * @author: chenxin
     * @date: 2018年5月23日 下午5:41:49
     * @return
     */
	Map<String, Object> getListTaskNoAndPhone() throws Exception;

	/**导出备货信息
	 * @author Fay
	 * @date 2018年5月24日 上午10:02:31
	 * @param queryParam
	 * @return
	 */
	List<Map<String, Object>> exportTaskAndOrderDetailGirdData(TaskGirdQuery queryParam);
	
	/**
	 * 修改任务的实际开始时间
	 * @author: chenxin
	 * @date: 2018年6月1日 下午5:21:32
	 * @param taskId
	 * @param date
	 */
	void updateActualStartByTaskId(Long taskId, Date date);
	
	/**
	 * 修改任务的实际完成时间
	 * @author: chenxin
	 * @date: 2018年6月1日 下午5:21:32
	 * @param taskId
	 * @param date
	 */
	void updateActualFinishByTaskId(Long taskId, Date date);

	/**
	 * 统计司机连续上班数
	 * @author: chenxin
	 * @date: 2018年6月4日 下午2:15:13
	 * @param queryParam
	 * @return
	 */
	List<DriverWorkVO> driverGirdData(DriverGirdQuery queryParam) throws Exception;
	/**
	 * 查询该车辆的其他任务
	 * @author: chenxin
	 * @date: 2018年6月14日 下午12:58:17
	 * @param id
	 * @param vehicleId
	 * @return
	 */
	List<TTask> getVehicleTaskByVidAndTid(Long taskId, Long vehicleId);

	void UpdateVehicleCarvldTimeByVid(Long taskId, Long vehicleId);

	void UpdateVehicleCarvldTimeByVidAndDate(Long vehicleId);
	/**
	 * 查询未确认并没有司机的任务
	 * @author: chenxin
	 * @date: 2018年7月12日 下午4:18:40
	 * @return
	 */
	List<TTask> getNoDriverTask();
	/**
	 * 给没有司机的任务分配司机
	 * @author: chenxin
	 * @date: 2018年7月12日 下午4:25:05
	 * @param taskList 没有司机的任务
	 * @return
	 */
	int automaticallyDrivers(List<TTask> taskList) throws Exception;


}
